package org.jeecg.modules.degression.controller;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.degression.pojo.*;
import org.jeecg.modules.degression.service.IDegressionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * 成本管理控制器
 *
 * @author pc
 * @since 20201125
 */
@RestController
@RequestMapping("/degression")
public class DegressionController {

    @Autowired
    IDegressionService service;

    /**
     * 查询成本项列表
     *
     * @param pageNo       当前页
     * @param pageSize     页面大小
     * @param category     类别 查询条件
     * @param businessType 业务类型 查询条件
     */
    @RequestMapping("/listPrice")
    public Result<?> listPrice(@RequestParam(name = "pageNo", defaultValue = "1") int pageNo,
                               @RequestParam(name = "pageSize", defaultValue = "10") int pageSize,
                               Integer category, Integer businessType) {
        Page<MlccPriceSystemPinglei> page = new Page<>(pageNo, pageSize);
        try {
            IPage<MlccPriceSystemPinglei> iPage = service.listPrice(page, category, businessType);
            return Result.ok(iPage);
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("发生异常");
        }
    }

    /**
     * 删除不需要的成本项
     *
     * @param id
     */
    @RequestMapping("/delPriceC")
    public Result<?> delPriceC(String id) {
        try {
            int result = service.delPriceC(id);
            if (result > 0) {
                return Result.ok("操作成功");
            } else {
                return Result.error("操作失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("操作失败");
        }
    }

    /**
     * 查询定制项下的小模块
     *
     * @param categoryid 类别ID
     * @param code       小模块编码
     */
    @RequestMapping("/selectSmallMotule")
    public JSONObject selectSmallMotule(Integer categoryid, String code) {
        JSONObject jsonObject = new JSONObject();
        try {
            MlccModuleSmallTemplate moduleSmallTemplate = service.selectSmallMotule(categoryid, code);
            jsonObject.put("code", "0");
            jsonObject.put("data", moduleSmallTemplate);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", "1");
            jsonObject.put("msg", "系统异常");
        }
        return jsonObject;
    }

    /**
     * 查询定制项下的小模块 (下拉模式)
     *
     * @param categoryid 类别ID
     */
    @RequestMapping("/selectSmallMotule2")
    public JSONObject selectSmallMotule2(Integer categoryid) {
        JSONObject jsonObject = new JSONObject();
        try {
            List<MlccModuleSmallTemplate> moduleSmallTemplate = service.selectSmallMotule2(categoryid);
            jsonObject.put("code", "0");
            jsonObject.put("data", moduleSmallTemplate);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", "1");
            jsonObject.put("msg", "系统异常");
        }
        return jsonObject;
    }

    /**
     * 获取定制项详情
     *
     * @param id 类别ID
     */
    @RequestMapping("/categoryDetail")
    public JSONObject categoryDetail(Integer id) {
        JSONObject jsonObject = new JSONObject();
        try {
            MlccCategoryInfo categoryInfo = service.categoryDetail(id);
            jsonObject.put("code", "0");
            jsonObject.put("data", categoryInfo);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", "1");
            jsonObject.put("msg", "系统异常");
        }
        return jsonObject;
    }

    /**
     * 保存定制成本项
     *
     * @param systemID     上级主键ID
     * @param systemCateID 成本管理的类别ID
     * @param categoryID   类别ID
     * @param categoryName 类别名称
     * @param price        价格
     * @param costCode     具体定制项的编号
     */
    @RequestMapping("/savePrice")
    public JSONObject savePrice(String systemID, String systemCateID, String categoryID, String categoryName, String price, String costCode) {
        JSONObject jsonObject = new JSONObject();
        try {
            int result = service.savePricesavePrice(systemID, systemCateID, categoryID, categoryName, price, costCode);
            if (result < 1) {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "添加失败");
            }
            if (result > 0) {
                jsonObject.put("code", 0);
                jsonObject.put("msg", "添加成功");
            }
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "系统异常");
        }
        return jsonObject;
    }


    /**
     * 获取保存的成本项
     *
     * @param pageNo   当前页
     * @param pageSize 页面大小
     * @param systemID 上级ID
     * @param typeID   标签页ID
     */
    @RequestMapping("/listChengben")
    public Result<?> listChengben(@RequestParam(name = "pageNo", defaultValue = "1") int pageNo,
                                  @RequestParam(name = "pageSize", defaultValue = "10") int pageSize, String systemID, String typeID) {
        Page<MlccPriceSystemCostRecord> page = new Page<>(pageNo, pageSize);
        try {
            IPage<MlccPriceSystemCostRecord> iPage = service.listChengben(page, systemID, typeID);
            return Result.ok(iPage);
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("查询失败");
        }
    }

    /**
     * 删除成本项
     *
     * @param id 成本项id
     */
    @RequestMapping("/delChengben")
    public Result<?> delChengben(String id) {
        try {
            int result = service.delChengben(id);
            if (result > 0) {
                return Result.ok("操作成功");
            } else {
                return Result.error("操作失败");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("操作失败");
        }
    }

    /**
     * 更新成本价
     *
     * @param id    成本数据ID
     * @param price 价格
     */
    @RequestMapping("/updatePrice")
    public JSONObject updatePrice(String id, String price) {
        JSONObject jsonObject = new JSONObject();
        try {
            int result = service.updatePrice(id, price);
            if (result < 1) {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "添加失败");
            }
            if (result > 0) {
                jsonObject.put("code", 0);
                jsonObject.put("msg", "添加成功");
            }
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "系统异常");
        }
        return jsonObject;
    }

    /*=====================加急项成本================*/

    /**
     * 加急项列表
     *
     * @param category 品类ID
     */
    @RequestMapping("/listUrgent")
    public JSONObject listUrgent(String category) {
        JSONObject jsonObject = new JSONObject();
        try {
            List<MlccAddPriceInfo> types = service.listUrgent(category);
            jsonObject.put("code", "0");
            jsonObject.put("data", types);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", "1");
            jsonObject.put("msg", "系统异常");
        }
        return jsonObject;
    }

    /**
     * 获取系统加急项详情
     *
     * @param id 数据ID
     */
    @RequestMapping("/urgentDetail")
    public JSONObject urgentDetail(String id) {
        JSONObject jsonObject = new JSONObject();
        try {
            MlccAddPriceInfo types = service.urgentDetail(id);
            jsonObject.put("code", "0");
            jsonObject.put("data", types);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", "1");
            jsonObject.put("msg", "系统异常");
        }
        return jsonObject;
    }

    /**
     * 保存系统加急成本项(公用)
     *
     * @param costID       关联的参数的数据ID，如绣字的ID，绣字高度的id
     * @param typeID       类型：0定制项，1定制项下的参数，2绣字工艺，3撞色，4绣字部位，5绣字高度，6返修参数，7加急项
     * @param systemID     上级主键ID
     * @param systemCateID 成本管理的类别ID
     * @param categoryName 加急项名称
     * @param price        价格
     */
    @RequestMapping("/saveurgent")
    public JSONObject saveurgent(String costID, Integer typeID, String systemID, String systemCateID,
                                 String categoryName, String price, String costCode) {
        JSONObject jsonObject = new JSONObject();
        try {
            int result = service.saveurgent(costID, typeID, systemID, systemCateID, categoryName, price, costCode);
            if (result < 1) {
                jsonObject.put("code", 1);
                jsonObject.put("msg", "添加失败");
            }
            if (result > 0) {
                jsonObject.put("code", 0);
                jsonObject.put("msg", "添加成功");
            }
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", 1);
            jsonObject.put("msg", "系统异常");
        }
        return jsonObject;
    }

    /*================返修尺寸成本项====================*/

    /**
     * 获取所有返修项
     *
     * @param categoryID 类别ID
     */
    @RequestMapping("/listFanxiuSize")
    public JSONObject listFanxiuSize(String categoryID) {
        JSONObject jsonObject = new JSONObject();
        try {
            List<MlccCategoryFanxiuInfo> types = service.listFanxiuSize(categoryID);
            jsonObject.put("code", "0");
            jsonObject.put("data", types);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", "1");
            jsonObject.put("msg", "系统异常");
        }
        return jsonObject;
    }

    /**
     * 获取返修参数详情
     *
     * @param id 单休参数数据主键ID
     */
    @RequestMapping("/fanxiuDetail")
    public JSONObject fanxiuDetail(String id) {
        JSONObject jsonObject = new JSONObject();
        try {
            MlccCategoryFanxiuInfo types = service.fanxiuDetail(id);
            jsonObject.put("code", "0");
            jsonObject.put("data", types);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", "1");
            jsonObject.put("msg", "系统异常");
        }
        return jsonObject;
    }

    /**
     * 查询撞色工艺 （不用，改为下拉模式）
     *
     * @param code       撞色编码
     * @param categoryID 类别ID
     */
    @RequestMapping("/contColor")
    public JSONObject contColor(String code, String categoryID) {
        JSONObject jsonObject = new JSONObject();
        try {
            MlccContrastcolorInfo types = service.contColor(code, categoryID);
            jsonObject.put("code", "0");
            jsonObject.put("data", types);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", "1");
            jsonObject.put("msg", "系统异常");
        }
        return jsonObject;
    }

    /**
     * 查询撞色工艺 （下拉模式）
     *
     * @param categoryID 类别ID
     */
    @RequestMapping("/contColor2")
    public JSONObject contColor2(String categoryID) {
        JSONObject jsonObject = new JSONObject();
        try {
            List<MlccContrastcolorInfo> types = service.contColor2(categoryID);
            jsonObject.put("code", "0");
            jsonObject.put("data", types);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", "1");
            jsonObject.put("msg", "系统异常");
        }
        return jsonObject;
    }

    /*=================绣字高度与部位===================*/

    /**
     * 查询绣字高度
     *
     * @param categoryID 类别ID
     */
    @RequestMapping("/listXiuziHeight")
    public JSONObject listXiuziHeight(String categoryID) {
        JSONObject jsonObject = new JSONObject();
        try {
            List<MlccEmbdtypePrice> types = service.listXiuziHeight(categoryID);
            jsonObject.put("code", "0");
            jsonObject.put("data", types);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", "1");
            jsonObject.put("msg", "系统异常");
        }
        return jsonObject;
    }

    /**
     * 获取绣字高度详情
     *
     * @param id 绣字高度ID
     */
    @RequestMapping("/xiuxiDetail")
    public JSONObject xiuxiDetail(String id) {
        JSONObject jsonObject = new JSONObject();
        try {
            MlccEmbdtypePrice types = service.xiuxiDetail(id);
            jsonObject.put("code", "0");
            jsonObject.put("data", types);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", "1");
            jsonObject.put("msg", "系统异常");
        }
        return jsonObject;
    }

    /**
     * 查询绣字位置集合
     *
     * @param categoryID 类别ID
     */
    @RequestMapping("/listXiuziHandler")
    public JSONObject listXiuziHandler(String categoryID, String code) {
        JSONObject jsonObject = new JSONObject();
        try {
            List<MlccCategoryLocaltion> types = service.listXiuziHandler(categoryID, code);
            jsonObject.put("code", "0");
            jsonObject.put("data", types);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", "1");
            jsonObject.put("msg", "系统异常");
        }
        return jsonObject;
    }

    /**
     * 绣字位置详情
     *
     * @param id 绣字位置ID
     */
    @RequestMapping("/locationDetail")
    public JSONObject locationDetail(String id) {
        JSONObject jsonObject = new JSONObject();
        try {
            MlccCategoryLocaltion types = service.locationDetail(id);
            jsonObject.put("code", "0");
            jsonObject.put("data", types);
        } catch (Exception e) {
            e.printStackTrace();
            jsonObject.put("code", "1");
            jsonObject.put("msg", "系统异常");
        }
        return jsonObject;
    }
}
